/* 显示器 */

#include<iostream>
using namespace std;

struct TConfig
{
	int s;
	int value;
};

int main(void)
{
	/* 0~9, 2s+3 rows and s+2 cols per num */
	const char strNum[10][5][4] = 
	{
		{
			" - ",
			"| |",
			"   ",
			"| |",
			" - "
		},
		{
			"   ",
			"  |",
			"   ",
			"  |",
			"   "
		},
		{
			" - ",
			"  |",
			" - ",
			"|  ",
			" - "
		},
		{
			" - ",
			"  |",
			" - ",
			"  |",
			" - "
		},
		{
			"   ",
			"| |",
			" - ",
			"  |",
			"   "
		},
		{
			" - ",
			"|  ",
			" - ",
			"  |",
			" - "
		},
		{
			" - ",
			"|  ",
			" - ",
			"| |",
			" - "
		},
		{
			" - ",
			"  |",
			"   ",
			"  |",
			"   "
		},
		{
			" - ",
			"| |",
			" - ",
			"| |",
			" - "
		},
		{
			" - ",
			"| |",
			" - ",
			"  |",
			" - "
		}
	};

	constexpr TConfig config[] = {{2, 12345}, {3, 67890}, {4, 1234567890}};
	int nCount = sizeof(config) / sizeof(config[0]);

	for (int i = 0; i < nCount; i++)
	{
		char strOfValue[32];
		sprintf(strOfValue, "%d", config[i].value);

		int s = config[i].s;
		const char* p;

		int rowNum = 2 * s + 3;
		int colNum = s + 2;

		for (int i = 0; i < rowNum; i++)
		{
			int mapRow = 0;
			if (i == 0)
			{
				mapRow = 0;
			}
			else if (i < s + 1)
			{
				mapRow = 1;
			}
			else if (i == s + 1)
			{
				mapRow = 2;
			}
			else if (i < 2 * s + 2)
			{
				mapRow = 3;
			}
			else
			{
				mapRow = 4;
			}

			for (p = strOfValue; *p != '\0'; p++)
			{
				int idx = *p - '0';
				
				cout<< strNum[idx][mapRow][0];
				for (int j = 0; j < s; j++)
				{
					cout<< strNum[idx][mapRow][1];
				}
				cout<< strNum[idx][mapRow][2];
				cout<< " ";
			}
			cout<< "\n";
		}

		cout<< "\n";
	}	

	return 0;
}
